/**
 * 给你一个 非严格递增排列 的数组 nums ，请你 原地 删除重复出现的元素，
 * 使每个元素 只出现一次 ，返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
 * 然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ，你需要做以下事情确保你的题解可以被通过：

更改数组 nums ，使 nums 的前 k 个元素包含唯一元素，并按照它们最初在 nums 中出现的顺序排列。
nums 的其余元素与 nums 的大小不重要。
返回 k 。
*/
#if 1
#include <stdio.h>
// 0 0 0 1 1 1 2 3 3 3 4 4
// 0 0 1 1 1 2 3 3 3 4 4 4
// 0 1 1 1 2 3 3 3 4 4 4 4
// 0 1 1 2 3 3 3 4 4 4 4 4
// 0 1 2 3 3 3 4 4 4 4 4 4

int removeDuplicates(int *nums, int numsSize)
{
    int *ptr;  // 移动指针始终指向判断的第一个元素
    int *ptr1; // 移动指针覆盖将重复元素删除
    ptr = nums;
    ptr1 = nums;
    int temp = nums[numsSize - 1];
    static int count = 0;
    while (*(ptr) != temp)
    {
        //如果相邻的两个数相同
        if (*(ptr1) == *(ptr1 + 1))
        {
            // 进行一次重复值的删除
            for (int i = 1; (i + count) < numsSize - 1; i++)
            {
                ptr1[i] = ptr1[i + 1];
            }
        }
        else
        {
            ptr++;
            ptr1++;
            count++;
        }
    }
    return count + 1;
}
int removeDuplicates1(int* nums, int numsSize) {
    if (numsSize == 0) {
        return 0;
    }
    int fast = 1, slow = 1;
    while (fast < numsSize) {
        if (nums[fast] != nums[fast - 1]) {
            nums[slow] = nums[fast];
            ++slow;
        }
        ++fast;
    }
    return slow;
}

int main()
{
    int nums[] = {0,0,0,1,1,1,2,3,3,3,4,4};
    int length = sizeof(nums) / sizeof(int);
    int count = 0;
    count = removeDuplicates(nums,length);
    printf("数量为：%d\n",count);
    for (int i = 0; i < count; i++)
    {
        /* code */
        printf("%d ",nums[i]);
    }
    
    return 0;
}
#endif